module et{
    export abstract class IUpdateSystem{
        get Type(){
            return Object.getPrototypeOf(this);
        }
        abstract run(o);
    }
    export abstract  class UpdateSystem<T> extends IUpdateSystem{
        run(o):void{
            this.update(o);
        }
        abstract  update(self:T):void;
    }
}